<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>2_props进行限制</title>
    </head>
    <body>
        <!-- 准备好一个“容器” -->
        <div id="test1"></div>
        <div id="test2"></div>
        <div id="test3"></div>
        <div id="test4"></div>
        <!-- 引入react核心库 -->
        <script type="text/javascript" src="../js/react.development.js"></script>
        <!-- 引入react-dom，用于支持react操作DOM -->
        <script type="text/javascript" src="../js/react-dom.development.js"></script>
        <!-- 引入babel，用于将JSX转为JS -->
        <script type="text/javascript" src="../js/babel.min.js"></script>
        <!-- 引入prop-types，用于对组件标签属性进行限制 -->
        <script type="text/javascript" src="../js/prop-types.js"></script>


        <script type="text/babel">
            //创建组件
            class  Person extends React.Component {
                render(){
                    console.log(this)
                    const {name,age,sex} = this.props
                    //props是只读的
                    // this.props.name = 'jack'    //此行代码会报错，因为props是只读的
                    return(
                        <div>
                            <ul>
                                <li>姓名：{name}</li>
                                <li>性别：{sex}</li>
                                <li>年龄：{age + 1}</li>
                            </ul>
                        </div>
                    )
                }
            }

            //对标签属性进行类型、必要性的限制
            Person.propTypes = {
                name:PropTypes.string.isRequired,   //name必须为字符串，且name必须传。
                sex:PropTypes.string,               //sex必须为字符串。
                age:PropTypes.number,               //age必须为number
                speak:PropTypes.func,               //speak必须为函数
            }
            //指定默认标签属性
            Person.defaultProps = {
                sex:'男',                           //性别默认值为-男
                age:18                              //年龄默认值为-18
            }
            const p = {name:'老刘',age:80,sex:'男'}
            ReactDOM.render(<Person name = '张三' sex = '男' age = {18} speak={speak}/>,document.getElementById('test1'))
            ReactDOM.render(<Person name = '李四' sex = '女' age = {20}/>,document.getElementById('test2'))
            ReactDOM.render(<Person name = '王五' sex = '男' age = {22}/>,document.getElementById('test3'))
            ReactDOM.render(<Person {...p}/>,document.getElementById('test4'))
            
            function speak(){
                console.log('我在说话')
            }
        </script>
    </body>
</html>
